﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ucb.Workshop.Business;
using System.Text.RegularExpressions;

namespace Ucb.Workshop.Presenters
{
    public class RegistroProveedorPresenter
    {
        private IRegistroProveedorView view;
        public IRegistroProveedorView View { get { return view;} }
        public RegistroProveedorPresenter(IRegistroProveedorView view)
        {
            this.view = view;
        }

        public void onRegistroProveedor()
        {
            
            if (HayValoresValidos())
            {
                ProviderManager elProveedor = ObtenerProveedorDeLaVista();
                InsertarProveedorABaseDeDatos(elProveedor);
            }
            else
            {
                throw new Exception("Se requiere que todos los campos tengan valores o que sean validos...");
            }
        }

        private bool HayValoresValidos()
        {
            bool hayValoresValidos = true;

            if (String.IsNullOrEmpty(View.Empresa) || String.IsNullOrEmpty(View.Ciudad) ||
                !IsNumber(View.Telefono) || !IsNumber(View.Fax) ||
                String.IsNullOrEmpty(View.Direccion) || String.IsNullOrEmpty(View.NumeroCuenta) ||
                String.IsNullOrEmpty(View.Banco))
            {
                hayValoresValidos = false;
            }

            return hayValoresValidos;
        }

        public bool IsNumber(String value)
        {
            return Regex.IsMatch(value, "^[0-9]+$");
        }

        private ProviderManager ObtenerProveedorDeLaVista()
        {
            ProviderManager elProveedor = new ProviderManager();
            elProveedor.Empresa = View.Empresa;
            elProveedor.Ciudad = View.Ciudad;
            elProveedor.Telefono = Convert.ToInt32(View.Telefono.ToString());
            elProveedor.Fax = Convert.ToInt32(View.Fax.ToString());
            elProveedor.Direccion = View.Direccion;
            elProveedor.NumeroCuenta = View.NumeroCuenta;
            elProveedor.Banco = View.Banco;

            return elProveedor;
        }
        private void InsertarProveedorABaseDeDatos(ProviderManager elProveedor)
        {
            if (!elProveedor.ExisteProveedor())
            {
                elProveedor.Registrar();    
            }
            else
            {
                throw new Exception("Ya esta registrado este proveedor, no se puede registrar....");
            }
        }
    }
}
